import router from "@/router/index";
import axios, { AxiosResponse } from "axios";
import {RouteLocationNormalized, NavigationGuardNext} from 'vue-router';
import {RouteRecordRaw} from "vue-router";
import {defineAsyncComponent} from "vue";
// 白名单
const whiteList: string[] = ['/ge_phonelogin','/login','/aouth_login','/ge_registration'] // no redirect whitelist

// 添加路由守卫
router.beforeEach((to: RouteLocationNormalized, from: RouteLocationNormalized, next: NavigationGuardNext) => {
  let a = true;
  // 检查是否需要进行完全URL跳转
  // if (to.path === '/login') {
  // //   axios.get("http://127.0.0.1:8000/choose_loginpage/",{  params: {
  // //   system: 'guanli',
  // // }})
  // //     .then((response: AxiosResponse) => {
  // //       // 如果响应状态码为200，表示请求成功，继续跳转
  // //       console.log(response.data.Login_Page)
  // //       if (response.data.Login_Page === 'changyou_loginpage') {
  // //         window.location.href = "http://oauth.cyou-inc.com:8088/oauth/oauth.html?redirectUrl=http://127.0.0.1:8000/save_token";
  // //       }
  // //       else if (response.data.Login_Page === 'phone_loginpage'){
  // //         // 否则，取消跳转，并显示错误信息
  // //         router.push('/ge_phonelogin');
  // //       }
  // //       else if (response.data.Login_Page === 'guge_loginpage'){
  // //         // 否则，取消跳转，并显示错误信息
  // //         router.push('/ge_phonelogin');
  // //       }
  // //     })
  // //     .catch(error => {
  // //       // 如果请求失败，取消跳转，并显示错误信息
  // //       console.log(error);
  // //       router.push('/ge_phonelogin');
  // //     });
  //   // 修改URL为指定的完全跳转URL
  //   // axios.get("http://127.0.0.1:8000/csrf/")
  //   //   .then((response: AxiosResponse) => {
  //   //     // 如果响应状态码为200，表示请求成功，继续跳转
  //   //     console.log(response.data.status);
  //   //     if (response.data.status === 200) {
  //   //       window.location.href = "http://oauth.cyou-inc.com:8088/oauth/oauth.html?redirectUrl=http://127.0.0.1:8000/save_token";
  //   //     } else {
  //   //       // 否则，取消跳转，并显示错误信息
  //   //       router.push('/ge_phonelogin');
  //   //     }
  //   //   })
  //   //   .catch(error => {
  //   //     // 如果请求失败，取消跳转，并显示错误信息
  //   //     console.log(error);
  //   //     router.push('/ge_phonelogin');
  //   //   });
  //   // 修改URL为指定的完全跳转URL
  // }
  if (whiteList.indexOf(to.path) !== -1) {
    a = false;
    next();
  }
  const resolved = router.resolve(to.path);

  if (resolved.matched.length === 0) {
    // 路由不存在，跳转至指定页面
    next('/home');
  } else {
    // 路由存在，继续导航
    next();
  }
   // 将当前路由信息保存在本地存储中
  // localStorage.setItem('currentPath', to.path)
  // 验证登录状态
  if (a) {
    const token = localStorage.getItem('permission');
    if (!token) {
      router.push('/login');
    }
    axios.post('http://127.0.0.1:8000/flush/', {'cardid': localStorage.getItem('cardid')}).then((response: AxiosResponse) => {
      const userInfo = response.data;//将当前用户的所有信息从数据库中读取一边，与本地数据进行对比，检测到更改后做出相应变化
      // 将用户信息保存到本地存储中
      const permission = userInfo.permission;
      const login = userInfo.login;
      const menus = JSON.stringify(userInfo.menus);
      const currentmenus = localStorage.getItem('menus')
      if (permission !== localStorage.getItem('permission') || localStorage.getItem('firstpath') === 'true' || menus !== currentmenus) {
        if (localStorage.getItem('firstpath') === 'false') {
          location.reload()
        }
        const jsonData = userInfo.path;
        localStorage.setItem('path', JSON.stringify(jsonData))
        jsonData.forEach((data: any) => {
          const childRoute: RouteRecordRaw = {
            path: data.path,
            name: data.name,
            component: defineAsyncComponent(() => import(`../views/${data.component}.vue`)),
          };
          router.addRoute('Home', childRoute);
        });
        localStorage.setItem('firstpath', 'false');//登录时路由进行初始化完成后，后续页面刷新路由不在更新
        localStorage.setItem('menus', menus);
        localStorage.setItem('permission', permission);
        // const currentPath = localStorage.getItem('currentPath')
        // if (currentPath) {
        //   // 跳转到保存的路径
        //   router.push(currentPath)
        // }
      }
      if (login === false) {
        router.push('/login');
        localStorage.clear(); // 删除存储的 token
      }
    }).catch(error => {
      console.error(error);
    });
  }
  next();
});